package org.example.ai04.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * 简历数据传输对象
 * 用于封装简历的完整信息，包括基本信息、教育经历、工作经验、技能等
 * 支持与前端交互及AI模型分析
 */
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class ResumeData {
    // 姓名
    private String name;
    // 邮箱地址
    private String email;
    // 电话号码
    private String phone;
    // 地址
    private String address;
    // 年龄
    private String age;
    // 出生日期
    private String birthDate;
    // 国籍
    private String nationality;
    // LinkedIn个人主页
    private String linkedin;
    // GitHub个人主页
    private String github;
    // 个人网站
    private String website;
    // 教育经历列表
    private List<Education> education;
    // 工作经验列表
    private List<WorkExperience> workExperience;
    // 技能列表
    private List<String> skills;
    // 语言能力列表
    private List<String> languages;
    // 证书认证列表
    private List<String> certifications;
    // 项目经验列表
    private List<String> projects;
    // 个人简介
    private String summary;
    // 求职目标
    private String objective;
    // 简历分析结果
    private ResumeData.ResumeAnalysis analysis;
    
    /**
     * 教育经历数据类
     * 封装教育背景相关信息，包括学校、学位、专业、起止时间等
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class Education {
        // 学位
        private String degree;
        // 学校名称
        private String school;
        // 专业
        private String major;
        // 毕业年份
        private String graduationYear;
        // 平均成绩
        private String gpa;
        // 开始日期
        private String startDate;
        // 结束日期
        private String endDate;
        // 教育经历描述
        private String description;
    }
    
    /**
     * 工作经验数据类
     * 封装工作经历相关信息，包括公司、职位、起止时间、工作内容描述等
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class WorkExperience {
        // 公司名称
        private String company;
        // 职位名称
        private String position;
        // 开始日期
        private String startDate;
        // 结束日期
        private String endDate;
        // 工作描述
        private String description;
        // 工作成就列表
        private List<String> achievements;
        // 工作地点
        private String location;
        // 所属部门
        private String department;
    }
    
    /**
     * 简历分析结果数据类
     * 封装简历质量评估信息，包括完整性检查、缺失部分、时间间隙和改进建议等
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ResumeAnalysis {
        // 简历是否完整
        private boolean isComplete;
        // 缺失的简历部分
        private List<String> missingSections;
        // 简历中的时间间隙
        private List<String> gaps;
        // 改进建议
        private List<String> suggestions;
        // 总体评分
        private String overallScore;
        // 分析摘要
        private String analysisSummary;
    }
    
    /**
     * 聊天消息数据类
     * 封装与简历相关的聊天消息，包括角色、内容和时间戳
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class ChatMessage {
        // 消息角色（user或assistant）
        private String role;
        // 消息内容
        private String content;
        // 消息时间戳
        private String timestamp;
    }
}
